package com.cloud.user_info.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.cloud.entity.AuthBody;
import com.cloud.entity.LoginBody;
import com.cloud.entity.SysUser;
import com.cloud.user_info.entity.vo.OptionUser;
import com.cloud.user_info.entity.vo.ProfileUser;
import com.cloud.user_info.entity.vo.ProjectRoleDao;
import com.cloud.user_info.entity.vo.UserBook;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 用户表 数据层
 *
 * @author ruoyi
 */
@Mapper
public interface SysUserMapper extends BaseMapper<SysUser> {

    /**
     * 根据条件分页查询用户列表
     *
     * @param param 用户信息
     * @return 用户信息集合信息
     */
    public List<SysUser> selectUserList(@Param("param") SysUser param);

    /**
     * 查询已分配用户角色列表
     *
     * @param param
     * @return
     */
    public List<SysUser> selectRoleAuthList(@Param("param") ProjectRoleDao param);

    /**
     * 根据账户密码查询账户信息
     *
     * @param param
     * @return 用户对象信息
     */
    public SysUser selectUserByLogin(@Param("param") LoginBody param);

    /**
     * 通过用户名查询用户
     *
     * @param name
     * @return 用户对象信息
     */
    public SysUser selectUserByUserName(@Param("name") String name);

    /**
     * 通过用户ID查询用户
     *
     * @param userId 用户ID
     * @return 用户对象信息
     */
    public SysUser selectUserById(@Param("userId") Long userId);

    /**
     * 修改用户头像
     *
     * @param userName 用户名
     * @param avatar   头像地址
     * @return 结果
     */
    public int updateUserAvatar(@Param("userName") String userName, @Param("avatar") String avatar);

    /**
     * 重置用户密码
     *
     * @param userName 用户名
     * @param password 密码
     * @return 结果
     */
    public int resetUserPwd(@Param("userName") String userName, @Param("password") String password);

    /**
     * 校验用户名称是否唯一
     *
     * @param userName 用户名称
     * @return 结果
     */
    public int checkUserNameUnique(@Param("userName") String userName);

    /**
     * 校验手机号码是否唯一
     *
     * @param phone 手机号码
     * @return 结果
     */
    public int checkPhoneUnique(@Param("phone") String phone, @Param("userId") Long userId);

    /**
     * 校验email是否唯一
     *
     * @param email 用户邮箱
     * @return 结果
     */
    public int checkEmailUnique(@Param("email") String email, @Param("userId") Long userId);

    /**
     * 根据授权信息获取用户信息
     *
     * @param param
     * @return
     */
    public SysUser selectUserByAuth(@Param("param") AuthBody param);

    /**
     * 查询用户通讯录列表
     *
     * @return
     */
    public List<UserBook> selectUserBookList(@Param("nickName") String nickName);

    /**
     * 根据部门主键查询用户主键列表
     *
     * @param deptId
     * @return
     */
    public String selectUserIds(@Param("deptId") Long deptId);

    /**
     * 查询下拉选择用户列表
     *
     * @return
     */
    public List<OptionUser> selectOptionUserList(@Param("param") SysUser user);

    /**
     * 根据昵称或电话查询账户信息
     *
     * @param phone
     * @return
     */
    public SysUser queryUserInfo(@Param("phone") String phone);

    /**
     * 根据账户查询信息
     *
     * @param userName
     * @return
     */
    public SysUser selectUserByName(@Param("userName") String userName);

    /**
     * 查询简介用户列表
     */
    public List<ProfileUser> getProfileUserList(@Param("param") ProfileUser param);

    /**
     * 查询简介用户信息
     */
    public ProfileUser getProfileUserInfo(@Param("param") ProfileUser param);

    /**
     * 根据主键查询用户信息
     */
    public ProfileUser getProfileUserId(@Param("userId") Long userId);

}
